/**
 * 校园二手交易平台 - Mock配置
 * 配置Umi Mock功能的相关参数
 */

/**
 * Mock配置选项
 */
export interface MockConfig {
  /** 是否启用Mock功能 */
  enabled: boolean;
  /** Mock数据延迟时间（毫秒） */
  delay: number | [number, number];
  /** 是否启用Mock数据热更新 */
  hotReload: boolean;
  /** Mock数据文件路径 */
  mockDir: string;
  /** 排除的文件模式 */
  exclude: string[];
}

/**
 * 默认Mock配置
 */
export const defaultMockConfig: MockConfig = {
  enabled: process.env.NODE_ENV === 'development',
  delay: [200, 800], // 200-800ms的随机延迟，模拟真实网络环境
  hotReload: true,
  mockDir: './src/mock',
  exclude: [
    '**/*.d.ts',
    '**/*.test.ts',
    '**/*.spec.ts',
    '**/mockUtils.ts',
    '**/config.ts'
  ]
};

/**
 * 开发环境Mock配置
 */
export const devMockConfig: MockConfig = {
  ...defaultMockConfig,
  enabled: true,
  delay: [100, 500], // 开发环境延迟较短
  hotReload: true
};

/**
 * 测试环境Mock配置
 */
export const testMockConfig: MockConfig = {
  ...defaultMockConfig,
  enabled: true,
  delay: [300, 1000], // 测试环境延迟较长
  hotReload: false
};

/**
 * 生产环境Mock配置
 */
export const prodMockConfig: MockConfig = {
  ...defaultMockConfig,
  enabled: false, // 生产环境禁用Mock
  delay: 0,
  hotReload: false
};

/**
 * 根据环境获取Mock配置
 */
export function getMockConfig(): MockConfig {
  const env = process.env.NODE_ENV || 'development';
  
  switch (env) {
    case 'development':
      return devMockConfig;
    case 'test':
      return testMockConfig;
    case 'production':
      return prodMockConfig;
    default:
      return defaultMockConfig;
  }
}

/**
 * Mock API 路由配置
 */
export const mockApiRoutes = {
  // 商品相关API
  products: {
    list: '/api/products/list',
    detail: '/api/products/detail/:id',
    create: '/api/products/create',
    update: '/api/products/update/:id',
    delete: '/api/products/delete/:id',
    status: '/api/products/status/:id',
    search: '/api/products/search',
    suggestions: '/api/products/search/suggestions',
    stats: '/api/products/stats',
    myProducts: '/api/products/my-products',
    favorite: '/api/products/favorite/:productId',
    favorites: '/api/products/favorites/my'
  },
  
  // 用户相关API
  users: {
    profile: '/api/users/profile',
    update: '/api/users/update',
    favorites: '/api/users/favorites'
  },
  
  // 订单相关API
  orders: {
    list: '/api/orders/list',
    detail: '/api/orders/detail/:id',
    create: '/api/orders/create',
    cancel: '/api/orders/cancel/:id'
  },
  
  // 分类相关API
  categories: {
    list: '/api/categories/list',
    tree: '/api/categories/tree'
  }
};

/**
 * Mock数据质量配置
 */
export const mockDataQuality = {
  // 数据真实性要求
  realism: {
    priceRealism: 0.8, // 价格合理性
    descriptionQuality: 0.9, // 描述质量
    imageRelevance: 0.85, // 图片相关性
    categoryAccuracy: 0.95, // 分类准确性
  },
  
  // 数据多样性要求
  diversity: {
    categoryDistribution: 0.8, // 类别分布多样性
    priceDistribution: 0.7, // 价格分布多样性
    conditionDistribution: 0.9, // 新旧程度分布
    schoolDistribution: 0.85 // 学校分布多样性
  },
  
  // 数据完整性要求
  completeness: {
    requiredFields: 1.0, // 必填字段完整性
    optionalFields: 0.6, // 可选字段完整性
    imageCoverage: 0.8, // 图片覆盖率
    tagCoverage: 0.7 // 标签覆盖率
  }
};

/**
 * Mock数据验证规则
 */
export const mockValidationRules = {
  // 商品数据验证规则
  product: {
    title: {
      minLength: 2,
      maxLength: 100,
      required: true
    },
    description: {
      minLength: 10,
      maxLength: 1000,
      required: true
    },
    price: {
      min: 0,
      max: 100000,
      required: true
    },
    category: {
      required: true,
      validValues: Object.values(require('../types/product').ProductCategory)
    },
    condition: {
      required: true,
      validValues: Object.values(require('../types/product').ProductCondition)
    }
  },
  
  // 用户数据验证规则
  user: {
    username: {
      minLength: 2,
      maxLength: 50,
      required: true
    },
    school: {
      minLength: 2,
      maxLength: 50,
      required: false
    }
  }
};

/**
 * Mock数据生成配置
 */
export const mockGenerationConfig = {
  // 商品生成配置
  product: {
    defaultCount: 150,
    maxCount: 1000,
    minPrice: 1,
    maxPrice: 10000,
    
    // 各类别商品数量分布
    categoryDistribution: {
      textbooks: 0.25,    // 教材书籍 25%
      electronics: 0.20,   // 电子产品 20%
      clothing: 0.15,     // 服饰鞋包 15%
      daily_goods: 0.12,  // 生活用品 12%
      sports: 0.08,       // 体育用品 8%
      stationery: 0.07,   // 学习用品 7%
      dormitory: 0.08,    // 宿舍用品 8%
      other: 0.05         // 其他类别 5%
    },
    
    // 新旧程度分布
    conditionDistribution: {
      new: 0.1,        // 全新 10%
      like_new: 0.2,   // 九成新 20%
      very_good: 0.25, // 八成新 25%
      good: 0.25,      // 七成新 25%
      fair: 0.15,      // 六成新 15%
      poor: 0.05       // 五成新及以下 5%
    },
    
    // 交易方式分布
    transactionMethodDistribution: {
      face_to_face: 0.6,  // 面交 60%
      mail: 0.2,         // 邮寄 20%
      both: 0.2          // 面交或邮寄 20%
    },
    
    // 商品状态分布
    statusDistribution: {
      active: 0.7,    // 上架中 70%
      sold: 0.2,      // 已售出 20%
      inactive: 0.1   // 已下架 10%
    }
  },
  
  // 用户生成配置
  user: {
    defaultCount: 50,
    verificationRate: 0.7, // 70%用户通过学生认证
    schoolDistribution: {
      '清华大学': 0.15,
      '北京大学': 0.15,
      '复旦大学': 0.12,
      '上海交通大学': 0.12,
      '浙江大学': 0.12,
      '南京大学': 0.1,
      '武汉大学': 0.1,
      '中山大学': 0.08,
      '其他': 0.06
    }
  }
};

/**
 * Mock数据导出配置
 */
export const mockExportConfig = {
  // JSON导出配置
  json: {
    indent: 2,
    includeMetadata: true,
    timestamp: true
  },
  
  // CSV导出配置
  csv: {
    delimiter: ',',
    includeHeaders: true,
    encoding: 'utf-8'
  },
  
  // 数据备份配置
  backup: {
    enabled: true,
    maxBackups: 5,
    backupDir: './mock-backups'
  }
};

/**
 * Mock调试配置
 */
export const mockDebugConfig = {
  // 控制台日志配置
  console: {
    enabled: true,
    level: 'info', // 'error', 'warn', 'info', 'debug'
    showTiming: true,
    showDataSize: true
  },
  
  // 网络请求模拟配置
  network: {
    simulateErrors: false,
    errorRate: 0.05, // 5%的错误率
    timeoutRate: 0.02, // 2%的超时率
    
    // 错误类型分布
    errorTypes: {
      'NETWORK_ERROR': 0.3,
      'SERVER_ERROR': 0.4,
      'VALIDATION_ERROR': 0.2,
      'AUTH_ERROR': 0.1
    }
  },
  
  // 性能监控配置
  performance: {
    enabled: true,
    slowThreshold: 1000, // 1秒以上视为慢请求
    logSlowRequests: true
  }
};

export default {
  config: getMockConfig(),
  routes: mockApiRoutes,
  quality: mockDataQuality,
  validation: mockValidationRules,
  generation: mockGenerationConfig,
  export: mockExportConfig,
  debug: mockDebugConfig
};